(function () {
    // 提取代码  父类
//1, abstract  抽象类  生来就是当父类的  不可创建实例对象  new
abstract class Animal{
   // 声明类型
   gname:string
   // 构造函数会在对象创建时调用
   constructor(gname:string){
       // 赋值
       this.gname=gname
   }
        //   定义一个抽象方法 
        // abstract 开头 ，没有方法体
        //2  抽象方法 只能定义在抽象类中， 子类必须对抽象方法进行重写
  abstract  sayHello():void
}
  // 立即执行函数 避免和别人冲突  函数作用域
  // 定义狗的类
  class Dog extends Animal{
    gage:number
    // 子类想添加一个属性  
       // 构造函数会在对象创建时调用
   constructor(gname:string, gage:number){
    // 构造函数 要调用父类的构造函数 因为继承
     super(gname)
    // 赋值
    this.gage=gage
    
}
     sayHello() {
        // super 父类
        //  super.sayHello()
        console.log('旺旺');
        
     }
  }
 const wangcai=new Dog('旺财',5)
 console.log(wangcai);
 
  wangcai.sayHello()
 

  





})()